﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GestorDeFlotasDesktop.UILogic;
using GestorDeFlotasModelo.Entities;
using GestorDeFlotasModelo.Factorias;
using GestorDeFlotasDesktop.UILogic.Helpers;

namespace GestorDeFlotasDesktop.AbmRol
{
    public partial class AbmRol : BaseForm
    {
        public AbmRol()
        {
            InitializeComponent();
        }

        protected override void OnVisibleChanged(EventArgs e)
        {
            try
            {
                base.OnVisibleChanged(e);

                GridCreation();
                SetGridData(TraerTodosLosRoles());

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private List<Rol> TraerTodosLosRoles()
        {
            List<Rol> roles = Transaccion.Factoria<FactoriaRol>().SelectTodos<Rol>();
            return roles;
        }

        #region Grid Configuration
        private void GridCreation()
        {
            //Creo las columnas de la grilla
            gvRoles.Columns.Clear();
            gvRoles.AutoGenerateColumns = false;
            gvRoles.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            gvRoles.Columns.Add(DataGridViewHelpers.CreateDataGridViewTextBoxColumn("Id", "Id", false));
            gvRoles.Columns.Add(DataGridViewHelpers.CreateDataGridViewTextBoxColumn("Nombre", "Nombre"));
            gvRoles.Columns.Add(DataGridViewHelpers.CreateDataGridViewCheckBoxColumn("Habilitado", "Habilitado"));
        }
        private void SetGridData(List<Rol> roles)
        {
            if (roles != null && roles.Count > 0)
            {
                gvRoles.DataSource = roles;
                gvRoles.Visible = true;
                lblNoItems.Visible = false;
            }
            else
            {
                lblNoItems.Visible = true;
                gvRoles.Visible = false;
            }
        }
        #endregion

        /// <summary>
        /// OnClick handler del botón de buscar para traer todos los roles que correspondan con la búsqueda.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                List<Rol> roles = Transaccion.Factoria<FactoriaRol>().SelectPorRolName(txtNombreRol.Text);
                SetGridData(roles);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// OnClick handler para el botón de Modificar
        /// Muestra el formulario para editar el Rol correspondiente.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnModificar_Click(object sender, EventArgs e)
        {
            try
            {
                if (gvRoles.SelectedRows.Count > 0)
                {
                    FormRol frm = new FormRol();
                    Rol rol = (Rol)gvRoles.SelectedRows[0].DataBoundItem;
                    if (rol != null)
                    {
                        frm.Show();
                        frm.LoadForm(FormMode.Update, rol);
                        this.Hide();
                    }
                }
                else
                {
                    MessageBox.Show("No has seleccionado ningun rol para modificar");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnDeshabilitar_Click(object sender, EventArgs e)
        {
            try
            {
                if (gvRoles.SelectedRows.Count > 0)
                {
                    Rol rol = (Rol)gvRoles.SelectedRows[0].DataBoundItem;
                    rol.Habilitado = false;
                    Transaccion.Persistir();
                    Transaccion.Factoria<FactoriaRol>().Suplantar(rol);
                    gvRoles.DataSource = TraerTodosLosRoles();
                }
                else
                {
                    MessageBox.Show("No has seleccionado ningun rol para eliminar");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            try
            {
                txtNombreRol.Text = string.Empty;
                gvRoles.DataSource = null;
                gvRoles.Rows.Clear();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}
